/*
 * PPMC.cpp
 *
 *  Created on: 07/06/2010
 *      Author: administrador
 */

#include "PPMC.h"

PPMC::PPMC(int ordenMaximo, EstrategiaPPMC* estrategia)
{
	this -> ordenMaximo = ordenMaximo;

	/* Inicializo la estrategia del PPMC y la clave del contexto de orden 0 */
	this -> estrategia = estrategia;
	this -> claveContextoOrdenCero = "\b";

	/* Creo el contexto de orden 0, lo agrego a la estrategia y lo inicializo como el contexto actual */
	Contexto* contextoOrdenCero = new Contexto(this -> claveContextoOrdenCero);
	this -> estrategia -> agregarContexto(contextoOrdenCero);
	this -> contextoActual = contextoOrdenCero;
}

PPMC::~PPMC()
{
	// TODO Auto-generated destructor stub
}

void PPMC::comprimir(char* rutaArchivo)
{
	fstream archivo;
	archivo.open(rutaArchivo, iostream::in);

	char caracter;
	Distribucion* distribucionActual ;
	Emisor* emisor;

	while (archivo.eof())
	{
		archivo.get(caracter);

		distribucionActual = this -> contextoActual -> buscarDistribucion(caracter);

		/********************************************************************************/
		emisor = new Emisor(distribucionActual -> getCaracter(), this -> contextoActual);
		// TODO : ACA DEBERIA LLAMARSE AL ARITMETICO PASANDOLE emisor
		delete emisor;
		/********************************************************************************/

		if (distribucionActual -> getCaracter() == Contexto::CARACTER_ESCAPE)
		{
			// TODO
		}
		else
		{
			// TODO
		}

	}

	archivo.close();
}

void PPMC::descomprimir(char* rutaArchivo)
{
	// TODO
}

